<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        /**
         * 1. 字面量
         * 2. new Object
         * 3. 构造函数
         * 4. var obj1 = Object.create(obj2) 创建
         *     创建出来的对象obj1 的原型对象是 obj2
         * 
         */

        /**
         *  需求：重写数组中的 push、pop、... 那七个改变原数组的方法
         *      1. 保留原数组的方法的功能
         *      2. 每次调用方法后，增加一个输出功能，视图已经更新了
         * 
         *  重写方法：方法本身在Array.prototype身上的
         */

        // var arr = [1,2,3,4];
        // arr.push(5,6,7,8); // 需要重写push方法

        // var originPrototype = Array.prototype;// 将数组之前的原型对象保存

        // Array.prototype.push = function(){
        //     console.log('this:',this);
        //     console.log(originPrototype.push);

        //     // 1. 调用原数组的方法，实现push功能
        //     //originPrototype.push.apply(this,[...arguments]);
        //     // 2. 增加一行输出
        //     //console.log('视图已经更新了');
        // }

        // arr.push(7,8,9);
        // console.log(arr);

        // var obj = {
        //     name:'atguigu',
        //     age:18
        // }

        // var obj2 = Object.create(obj);
        // console.log(obj2,obj);
        // console.log(obj2.__proto__ === obj);

        var newPrototype = Object.create(Array.prototype);

        // newPrototype.push = function () {
        //     // 1. 新数组的原型对象push方法，调用原数组的push方法
        //     Array.prototype.push.apply(this, arguments);
        //     // 2. 视图已经更新了
        //     console.log('视图已经更新了');
        // }

        var methods = ['push', 'pop', 'unshift', 'shift', 'splice', 'reverse', 'sort'];

        methods.forEach(function (methodName) {
            newPrototype[methodName] = function () {
                // 1. 新数组的原型对象push方法，调用原数组的push方法
                Array.prototype[methodName].apply(this, arguments);
                // 2. 视图已经更新了
                console.log('视图已经更新了');
            }
        })

        var arr = [1, 2, 3, 4];
        if (Array.isArray(arr)) {
            arr.__proto__ = newPrototype
        }

        arr.push(5, 6, 7);
        console.log(arr);

        arr.pop();
        console.log(arr);

        // arr.join('-');

        // 

    </script>
</body>

</html>